perm filename EFSOP.C[11,HE] blob sn#688191 filedate 1982-12-06 generic text, type T, neo UTF8
/* LINTLIBRARY */
/*
 * efsendopen.c
 *
 * EFTP Package
 *
 * EfSendOpen -- open an eftp channel for sending a file to standard
 *				EFTP socket.
 *
 * EfSendOpenS -- open an eftp channel for sending a file to specified
 *				socket.
 *
 * Jeffrey Mogul @ Stanford	28-January-1981
 *
 * Jeffrey Mogul @ Stanford	17 August 1982
 *	- added EfSendOpenS
 */

#include <eftp.h>
#include <pupconstants.h>
#include <pupstatus.h>

EfSendOpen(Efchan,Dest,timeout,bswap)
struct EftpChan *Efchan;		/* address of empty EftpChan */
struct Port *Dest;			/* destination host/net */
int   timeout;				/* channel timeout in seconds */
int   bswap;				/* 1=byte-swap, 0= don't */
					/* swapping wrt NSO */
{
	return(EfSendOpenS(Efchan, Dest, timeout, bswap, EFTPSERVER));
}

EfSendOpenS(Efchan,Dest,timeout,bswap, OurSocket)
struct EftpChan *Efchan;		/* address of empty EftpChan */
struct Port *Dest;			/* destination host/net */
int   timeout;				/* channel timeout in seconds */
int   bswap;				/* 1=byte-swap, 0= don't */
					/* swapping wrt NSO */
Socket OurSocket;			/* remote socket */
{	/* */
	long	eftpid;
	int	opstat;
	
	Efchan->sequence = 0;
	Efchan->WaitTime = timeout;

	Efchan->remport.host = Dest->host;
	Efchan->remport.net = Dest->net;
	Efchan->remport.socket = OurSocket;

	eftpid = UniqueSocket();

	opstat = pupopen(&Efchan->pchan,eftpid,&Efchan->remport);
	if (opstat != OK)
		return(opstat);
	
	pupsettimeout(&Efchan->pchan,ONESEC);

#ifdef	PUP__NNSO
	if (bswap)	/* means fix up last word */
		pupsetmode(&Efchan->pchan,
			PCM_WCHECKSUM+PCM_RCHECKSUM+PCM_WFIXLAST);
	else
		pupsetmode(&Efchan->pchan,
			PCM_WCHECKSUM+PCM_RCHECKSUM+PCM_NOWFIXLAST);
#else			/* don't byteswap wrt NSO */
	pupsetmode(&Efchan->pchan,PCM_WCHECKSUM+PCM_RCHECKSUM);
#endif

	pupsetdfilt(&Efchan->pchan,64);

	if (bswap)
		Efchan->ef_mode = EFTPM_SEND|EFTPM_BYTESWAP;
	else
		Efchan->ef_mode = EFTPM_SEND;

	return(OK);
}